#-----------------------------------------------------------------------------
# Copyright (c) Anaconda, Inc., and Bokeh Contributors.
# All rights reserved.
#
# The full license is in the file LICENSE.txt, distributed with this software.
#-----------------------------------------------------------------------------

#-----------------------------------------------------------------------------
# Boilerplate
#-----------------------------------------------------------------------------
from __future__ import annotations # isort:skip

import pytest ; pytest

#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------

# Module under test
import bokeh.colors.named as bcn # isort:skip

#-----------------------------------------------------------------------------
# Setup
#-----------------------------------------------------------------------------

COLORS = (
    ("aliceblue",             240,  248,  255),
    ("antiquewhite",          250,  235,  215),
    ("aqua",                  0,    255,  255),
    ("aquamarine",            127,  255,  212),
    ("azure",                 240,  255,  255),
    ("beige",                 245,  245,  220),
    ("bisque",                255,  228,  196),
    ("black",                 0,    0,    0),
    ("blanchedalmond",        255,  235,  205),
    ("blue",                  0,    0,    255),
    ("blueviolet",            138,  43,   226),
    ("brown",                 165,  42,   42),
    ("burlywood",             222,  184,  135),
    ("cadetblue",             95,   158,  160),
    ("chartreuse",            127,  255,  0),
    ("chocolate",             210,  105,  30),
    ("coral",                 255,  127,  80),
    ("cornflowerblue",        100,  149,  237),
    ("cornsilk",              255,  248,  220),
    ("crimson",               220,  20,   60),
    ("cyan",                  0,    255,  255),
    ("darkblue",              0,    0,    139),
    ("darkcyan",              0,    139,  139),
    ("darkgoldenrod",         184,  134,  11),
    ("darkgray",              169,  169,  169),
    ("darkgreen",             0,    100,  0),
    ("darkgrey",              169,  169,  169),
    ("darkkhaki",             189,  183,  107),
    ("darkmagenta",           139,  0,    139),
    ("darkolivegreen",        85,   107,  47),
    ("darkorange",            255,  140,  0),
    ("darkorchid",            153,  50,   204),
    ("darkred",               139,  0,    0),
    ("darksalmon",            233,  150,  122),
    ("darkseagreen",          143,  188,  143),
    ("darkslateblue",         72,   61,   139),
    ("darkslategray",         47,   79,   79),
    ("darkslategrey",         47,   79,   79),
    ("darkturquoise",         0,    206,  209),
    ("darkviolet",            148,  0,    211),
    ("deeppink",              255,  20,   147),
    ("deepskyblue",           0,    191,  255),
    ("dimgray",               105,  105,  105),
    ("dimgrey",               105,  105,  105),
    ("dodgerblue",            30,   144,  255),
    ("firebrick",             178,  34,   34),
    ("floralwhite",           255,  250,  240),
    ("forestgreen",           34,   139,  34),
    ("fuchsia",               255,  0,    255),
    ("gainsboro",             220,  220,  220),
    ("ghostwhite",            248,  248,  255),
    ("gold",                  255,  215,  0),
    ("goldenrod",             218,  165,  32),
    ("gray",                  128,  128,  128),
    ("green",                 0,    128,  0),
    ("greenyellow",           173,  255,  47),
    ("grey",                  128,  128,  128),
    ("honeydew",              240,  255,  240),
    ("hotpink",               255,  105,  180),
    ("indianred",             205,  92,   92),
    ("indigo",                75,   0,    130),
    ("ivory",                 255,  255,  240),
    ("khaki",                 240,  230,  140),
    ("lavender",              230,  230,  250),
    ("lavenderblush",         255,  240,  245),
    ("lawngreen",             124,  252,  0),
    ("lemonchiffon",          255,  250,  205),
    ("lightblue",             173,  216,  230),
    ("lightcoral",            240,  128,  128),
    ("lightcyan",             224,  255,  255),
    ("lightgoldenrodyellow",  250,  250,  210),
    ("lightgray",             211,  211,  211),
    ("lightgreen",            144,  238,  144),
    ("lightgrey",             211,  211,  211),
    ("lightpink",             255,  182,  193),
    ("lightsalmon",           255,  160,  122),
    ("lightseagreen",         32,   178,  170),
    ("lightskyblue",          135,  206,  250),
    ("lightslategray",        119,  136,  153),
    ("lightslategrey",        119,  136,  153),
    ("lightsteelblue",        176,  196,  222),
    ("lightyellow",           255,  255,  224),
    ("lime",                  0,    255,  0),
    ("limegreen",             50,   205,  50),
    ("linen",                 250,  240,  230),
    ("magenta",               255,  0,    255),
    ("maroon",                128,  0,    0),
    ("mediumaquamarine",      102,  205,  170),
    ("mediumblue",            0,    0,    205),
    ("mediumorchid",          186,  85,   211),
    ("mediumpurple",          147,  112,  219),
    ("mediumseagreen",        60,   179,  113),
    ("mediumslateblue",       123,  104,  238),
    ("mediumspringgreen",     0,    250,  154),
    ("mediumturquoise",       72,   209,  204),
    ("mediumvioletred",       199,  21,   133),
    ("midnightblue",          25,   25,   112),
    ("mintcream",             245,  255,  250),
    ("mistyrose",             255,  228,  225),
    ("moccasin",              255,  228,  181),
    ("navajowhite",           255,  222,  173),
    ("navy",                  0,    0,    128),
    ("oldlace",               253,  245,  230),
    ("olive",                 128,  128,  0),
    ("olivedrab",             107,  142,  35),
    ("orange",                255,  165,  0),
    ("orangered",             255,  69,   0),
    ("orchid",                218,  112,  214),
    ("palegoldenrod",         238,  232,  170),
    ("palegreen",             152,  251,  152),
    ("paleturquoise",         175,  238,  238),
    ("palevioletred",         219,  112,  147),
    ("papayawhip",            255,  239,  213),
    ("peachpuff",             255,  218,  185),
    ("peru",                  205,  133,  63),
    ("pink",                  255,  192,  203),
    ("plum",                  221,  160,  221),
    ("powderblue",            176,  224,  230),
    ("purple",                128,  0,    128),
    ("rebeccapurple",         102,  51,   153),
    ("red",                   255,  0,    0),
    ("rosybrown",             188,  143,  143),
    ("royalblue",             65,   105,  225),
    ("saddlebrown",           139,  69,   19),
    ("salmon",                250,  128,  114),
    ("sandybrown",            244,  164,  96),
    ("seagreen",              46,   139,  87),
    ("seashell",              255,  245,  238),
    ("sienna",                160,  82,   45),
    ("silver",                192,  192,  192),
    ("skyblue",               135,  206,  235),
    ("slateblue",             106,  90,   205),
    ("slategray",             112,  128,  144),
    ("slategrey",             112,  128,  144),
    ("snow",                  255,  250,  250),
    ("springgreen",           0,    255,  127),
    ("steelblue",             70,   130,  180),
    ("tan",                   210,  180,  140),
    ("teal",                  0,    128,  128),
    ("thistle",               216,  191,  216),
    ("tomato",                255,  99,   71),
    ("turquoise",             64,   224,  208),
    ("violet",                238,  130,  238),
    ("wheat",                 245,  222,  179),
    ("white",                 255,  255,  255),
    ("whitesmoke",            245,  245,  245),
    ("yellow",                255,  255,  0),
    ("yellowgreen",           154,  205,  50),
)

#-----------------------------------------------------------------------------
# General API
#-----------------------------------------------------------------------------

def test__all__() -> None:
    assert len(bcn.__all__) == 148

@pytest.mark.parametrize('name,R,G,B', COLORS)
def test_color(name: str, R: int, G: int, B: int) -> None:
    assert name in bcn.__all__
    c = getattr(bcn, name)
    assert (c.r, c.g, c.b) == (R, G, B)
    assert c.a == 1.0

#-----------------------------------------------------------------------------
# Dev API
#-----------------------------------------------------------------------------

#-----------------------------------------------------------------------------
# Private API
#-----------------------------------------------------------------------------

#-----------------------------------------------------------------------------
# Code
#-----------------------------------------------------------------------------
